package com.code.service;

import com.code.model.bo.AppUpgradeBO;
import com.code.model.vo.login.LoginCredentialVO;
import com.code.model.vo.user.ModifyPhoneVO;
import com.code.model.vo.user.RegisterUserVO;
import com.code.model.vo.user.TranPwdVO;
import com.code.user.model.bo.*;
import com.code.user.model.po.*;
import org.springframework.web.multipart.MultipartFile;

import java.util.List;
import java.util.Map;

/**
 * 用户业务接口
 *
 * @author tangyifei
 */
public interface UserService {

    User registerUser(RegisterUserVO registerUserVO);

    LoginToken addUserCertification(UserCertification userCertification);

    UserCertification getUserCertificationByUserId(String userId);

    void sendAuthCode(String phone, int category, String areaNo, Integer phoneIndex, String recommendPhone) throws Exception;

    LoginToken login(LoginCredentialVO loginCredentialVO);

    LoginToken doLoginNoPwd(LoginCredentialVO loginCredentialVO);

    void logout();

    void resetPwd(RegisterUserVO registerUserVO);

    void findPwd(RegisterUserVO registerUserVO);

    LoginToken uploadAvatar(MultipartFile file);

    String uploadPhoto(MultipartFile file);

    LoginToken modifyPersonalInfo(LoginUser loginUser);

    LoginToken modifyPhone(ModifyPhoneVO modifyPhoneVO);

    LoginToken modifyTranPwd(TranPwdVO tranPwdVO);

    LoginToken resetTranPwd(TranPwdVO tranPwdVO);

    LoginToken setTranPwd(TranPwdVO tranPwdVO);

    String getCoinAddress(String userId, String coinType) throws Exception;

    Map<String, Object> getAZPlanChannelList(String userId, String coinType);

    int recharge(RechargeTranRecord rechargeTranRecord) throws Exception;

    UserCoinBalanceBO getUsdtVersion(String recommenderPhone);

    Boolean verifyRegisterAuthCode(String phone, String authCode, String areaNo);

    Boolean verifyFindPwdAuthCode(String phone, String authCode);

    AppUpgradeBO upgradeApp();

    void synRechargeTran() throws Exception;

    User getUserDetail(String userId);

    List<UserCoinBalance> getUserCoinBalanceList(String userId);

    Map<String, Object> getRecommendsByUserId(String userId, Integer entryMoneyState, Integer page, Integer pageSize);

    Map<String, Object> getRecommendsByPhone(String phone, Integer entryMoneyState, Integer page, Integer pageSize);

    UserCertificationBO getUserCertificationList(UserCertificationBO userCertificationBO);

    int updateUserCertification(UserCertification userCertification);

    int updateSystemProtect(SystemSettingBO systemSettingBO);

    PhoneBO getUserPhones(String phone, Integer page, Integer pageSize);

    String getSystemProtect();

    int setUserOperate(UserOperateAuth userOperateAuth);

}
